package tp2.algocity.modelo;

public abstract class Hectarea implements Superficie {

	protected Territorio territorio;
	protected String tipo;
	protected Construccion construccion;
	protected boolean ocupado;
	protected PaqueteDeServicios serviciosInstalados;
	protected Posicion posicion;
	
	protected Hectarea(){
		this.serviciosInstalados = new PaqueteDeServicios();
		this.ocupado = false;
	}
	
	@Override
	public Posicion getPosicion() {
		return posicion;
	}

	@Override
	public String getDescripcion() {
		return tipo;
	}
	
	@Override
	public void agregarConstruccion(Construccion unaConstruccion){
		if (!ocupado && unaConstruccion.getServiciosNecesarios().incluidoEn(serviciosInstalados)) {
			this.construccion = unaConstruccion;
			this.ocupado = this.construccion.ocupacionTotal();
			unaConstruccion.agregarse(this);
			territorio.repartirServicioEnZona(unaConstruccion.getRango(), this.posicion, unaConstruccion.getServicioBrindado());
			System.out.println(unaConstruccion.getTipo() + " construida en: " + posicion.getPosX() + "," + posicion.getPosY());
		}
	}
	
	@Override
	public Construccion getConstruccion(){
		return this.construccion;
	}
	
	@Override
	public boolean ocupado(){
		return this.ocupado;
	}
	
	@Override
	public void agregarse(Territorio territorio, Posicion unaPosicion){
		this.territorio = territorio;
		this.posicion = unaPosicion;
	}
	
	@Override
	public void agregarServicio(Servicio unServicio){
		this.serviciosInstalados.agregarServicio(unServicio);
	}

	@Override
	public boolean contieneServicio(Servicio unServicio){
		return serviciosInstalados.contiene(unServicio);
	}
	
	
}
